package com.zenithmind.version.pojo.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 提交VO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "提交VO")
public class CommitVO {

    /**
     * 提交ID
     */
    @Schema(description = "提交ID")
    private String id;

    /**
     * 仓库ID
     */
    @Schema(description = "仓库ID")
    private String repositoryId;

    /**
     * 仓库名称
     */
    @Schema(description = "仓库名称")
    private String repositoryName;

    /**
     * 提交哈希
     */
    @Schema(description = "提交哈希")
    private String commitHash;

    /**
     * 短哈希
     */
    @Schema(description = "短哈希")
    private String shortHash;

    /**
     * 提交消息
     */
    @Schema(description = "提交消息")
    private String message;

    /**
     * 提交描述
     */
    @Schema(description = "提交描述")
    private String description;

    /**
     * 分支名称
     */
    @Schema(description = "分支名称")
    private String branchName;

    /**
     * 父提交哈希
     */
    @Schema(description = "父提交哈希")
    private String parentCommitHash;

    /**
     * 作者ID
     */
    @Schema(description = "作者ID")
    private String authorId;

    /**
     * 作者名称
     */
    @Schema(description = "作者名称")
    private String authorName;

    /**
     * 作者邮箱
     */
    @Schema(description = "作者邮箱")
    private String authorEmail;

    /**
     * 提交者ID
     */
    @Schema(description = "提交者ID")
    private String committerId;

    /**
     * 提交者名称
     */
    @Schema(description = "提交者名称")
    private String committerName;

    /**
     * 提交者邮箱
     */
    @Schema(description = "提交者邮箱")
    private String committerEmail;

    /**
     * 提交时间
     */
    @Schema(description = "提交时间")
    private LocalDateTime commitTime;

    /**
     * 变更文件数
     */
    @Schema(description = "变更文件数")
    private Integer changedFiles;

    /**
     * 新增行数
     */
    @Schema(description = "新增行数")
    private Integer addedLines;

    /**
     * 删除行数
     */
    @Schema(description = "删除行数")
    private Integer deletedLines;

    /**
     * 提交类型
     */
    @Schema(description = "提交类型")
    private String commitType;

    /**
     * 是否已签名
     */
    @Schema(description = "是否已签名")
    private Boolean isSigned;

    /**
     * 签名状态
     */
    @Schema(description = "签名状态")
    private String signatureStatus;

    /**
     * 标签列表
     */
    @Schema(description = "标签列表")
    private List<String> tags;

    /**
     * 父提交列表
     */
    @Schema(description = "父提交列表")
    private List<String> parentCommits;

    /**
     * 文件变更列表
     */
    @Schema(description = "文件变更列表")
    private List<Object> fileChanges;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    private LocalDateTime createTime;

    /**
     * 是否可回滚
     */
    @Schema(description = "是否可回滚")
    private Boolean canRevert;

    /**
     * 是否可挑选
     */
    @Schema(description = "是否可挑选")
    private Boolean canCherryPick;
}
